/** @license
 * MIT License
 *
 * Copyright (c) 2018
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
import commonjs from '@rollup/plugin-commonjs'
import resolve from '@rollup/plugin-node-resolve'
import { join } from 'path'
import copy from 'rollup-plugin-copy'
import externals from 'rollup-plugin-node-externals'
import ts from 'rollup-plugin-ts'

const cwd = __dirname

const base = {
  external: d => {
    return /^@(system|ohos)\./.test(d)
  },
  plugins: [
    externals({
      devDeps: false
    }),
    resolve({
      preferBuiltins: false
    }),
    ts({
      declaration: false
    }),
    commonjs()
  ]
}

// 供 CLI 编译时使用的 Taro 插件入口
const compileConfig = {
  ...base,
  input: join(cwd, 'src/index.ts'),
  output: {
    file: join(cwd, 'dist/index.js'),
    format: 'cjs',
    sourcemap: true,
    exports: 'named'
  },
  plugins: [
    ...base.plugins,
    copy({
      targets: [
        { src: 'src/template/container.js', dest: 'dist/template' },
        { src: 'src/template/global.scss', dest: 'dist/template' },
        { src: 'src/components/components-harmony', dest: 'dist' }
      ]
    })
  ]
}

// 供 Loader 使用的运行时入口
const runtimeConfig = {
  ...base,
  input: join(cwd, 'src/runtime.ts'),
  output: {
    file: join(cwd, 'dist/runtime.js'),
    format: 'es',
    sourcemap: true
  }
}

// 供继承的包使用，为了能 tree-shaking
const runtimeUtilsConfig = {
  ...base,
  input: join(cwd, 'src/runtime-utils.ts'),
  output: {
    file: join(cwd, 'dist/runtime-utils.js'),
    format: 'es',
    sourcemap: true
  }
}

// React 下 webpack 会 alias @tarojs/components 为此文件
const otherConfig = {
  ...base,
  input: join(cwd, 'src/components/components-react.ts'),
  output: {
    file: join(cwd, 'dist/components/components-react.js'),
    format: 'es',
    sourcemap: true
  },
  plugins: [
    ts({
      declaration: false
    })
  ]
}

module.exports = [compileConfig, runtimeConfig, runtimeUtilsConfig, otherConfig]
